<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1.JS延迟加载的方式有哪些？（5）
        // 用外联式引用js文件
        // 把js文件放在页面底部，最后加载
        // 给script标签添加defer属性

        // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；（5）
        // ECMAScript：ECMA组织制定的一套标准
        // DOM：document object model，文档对象模型
        // BOMECMA：brower object model，浏览器对象模型

        // 3.JavaScript 的数据类型有哪些？（5）
        // 简单数据类型：
        // String、Number、Boolean、Undefined、Null、Symbol
        // 复杂数据类型：
        // Object 对象数据类型；
        // Array 数组；
        // Function 函数

        // 4.如何进行数据类型的判断？（5）
        // typeof 检测的数据；
        // 检测数据类型 instance 构造函数，检测结果返回布尔值（true、false）
        // Object.prototype.toString.call(检测的数据)

        // 5.null 和 undefined 的区别？什么时候会得到 undefined？（5）
        // null表示"没有对象"，即该处不应该有值。
        // undefined表示"缺少值"，就是此处应该有一个值，但是还没有定义。
        //当使用var或let声明了变量但没有初始化，就相当于给变量赋了undefined值

        // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？（5）
        // undefined 是由 null 派生而来的，可以将它们视为表面上相同，所以 null == undefined 返回 true；
        // 但它们不绝对相等，所以 null === undefined 返回 false

        // 7.使用 continue 或 break 终止循环时，两种方式的区别是？（5）
        // break 中断所有的控制流程
        // continue 跳出当前符合条件的流程，继续下一个流程

        // 8.如何判断字符串内是否包含指定字符？（5）、
        //可以使用string方法的indexOf()

        // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；（5）
        // 会修改数组：splice() reverse() push() pop() ubshit() shift()
        // 不会修改数组： concat() join() splice()
        // 位置查找：indexOf() lastIndexOf() include()

        // 10. 请写出下面语句的输出结果：（5）
        var bar = true,
            number = 0;
        console.log(bar + 0);   //1
        console.log(bar + "xyz");   //truexyz
        console.log(bar + true);    //2
        console.log(+true); //1
        console.log(!'bluej');  //false
        console.log(number++);  //0
        console.log(++number);  //2
        console.log(number);    //2

        // 11. 根据用户输入时间实现倒计时，输入格式错误时要有所提示（5）
        // window.prompt("请输入目标时间");
        
        
        // 13.把下面数组成员排序打乱；（5）
        var arr13 = [10, 20, 30, 40, 50, 60];
        let newArr13 = [];
        for (let i = 0; i < arr13.length; i++) {
            let ran = Math.floor(Math.random() * arr13.length);

            if (!newArr13.includes(arr13[ran])) { 
                newArr13.push(arr13[ran]);
            } else {
                i--; 
            }

        };

        console.log(newArr13);

        // 12.输出从小到大排序好的五个不重复的随机"素数",范围[10-58)；（10）


        // 14. 将多个数组进行去重合并；（10）
        var arr1 = [1, 2, 3],
            arr2 = [2, 3, 4, 5];

        var arr = arr1.concat(arr2);  //合并数组
        var arrNew= new Set(arr); //通过set集合去重
 
        console.log("arrNew",Array.from(arrNew)); //将set集合转化为数组

        // 15. 找出数组 arr=[1, 2, 3, "melon", 4, "melon", 2, 4, "melon"] 中重复出现过的元素,并用数组将重复元素装起来输出,并且统计每个元素出现的次数（10）
        var arr15=[1, 2, 3, "melon", 4, "melon", 2, 4, "melon"];
        var newArr15 = [];
        var count1 = 0;
        var count2 = 0;
        var count3 = 0;
        for (let i = 0; i < arr15.length; i++) {
            for (let j = i + 1; j < arr15.length; j++) {
                if (arr15[i] == arr15[j] && (newArr15.indexOf(arr15[i]) == -1)) {
                    newArr15.push(arr15[j]);
                }
            }
            if(arr15[i] == 2){
                count1++;
            }else if(arr15[i] == 4){
                count2++;
            }else if(arr15[i] == "melon"){
                count3++;
            };
        };
        console.log(newArr15);
        console.log("2出现" + count1 +"次","4出现" + count2 +"次","“melon”出现" + count3 +"次");


        // 16. 找出数组中年龄小于18岁的女生的信息重新组成新的数组,并且将她们count变为现有的平方（10）
        var arr = [{
                name: "111",
                sex: "boy",
                age: 18,
                count: 20
            },
            {
                name: "222",
                sex: "girl",
                age: 17,
                count: 30
            },
            {
                name: "333",
                sex: "boy",
                age: 16,
                count: 40
            },
            {
                name: "444",
                sex: "girl",
                age: 15,
                count: 50
            },
            {
                name: "555",
                sex: "boy",
                age: 20,
                count: 60
            },
            {
                name: "666",
                sex: "girl",
                age: 13,
                count: 70
            },
            {
                name: "777",
                sex: "boy",
                age: 14,
                count: 80
            }
        ]
        for(let i = 0; i <arr.length;i++){
            if(arr[i]["age"]<18){
                console.log(arr[i])
            }
        };
    </script>
</body>

</html>